{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "a8ef9ad9-c7e1-4fed-b0bd-581064558089",
   "metadata": {},
   "source": [
    "# GPT-3.5-Turbo Performance on MMLU - Clinical Knowledge"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "4f1c09a4-4859-469b-a156-dbb037c83a65",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "import openai\n",
    "import re\n",
    "import time\n",
    "import json\n",
    "\n",
    "import numpy as np\n",
    "\n",
    "from tqdm import tqdm\n",
    "from datasets import load_dataset\n",
    "from tenacity import retry, stop_after_attempt, wait_chain, wait_fixed"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "eaea2a2a-2515-4508-9cdb-084d10853170",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "openai.api_key = \"sk-\" "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "95ddd688-5bf5-40c5-a852-32e62f5a1bbb",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "@retry(wait=wait_chain(*[wait_fixed(3) for i in range(3)] +\n",
    "                       [wait_fixed(5) for i in range(2)] +\n",
    "                       [wait_fixed(10)]))\n",
    "def completion_with_backoff(**kwargs):\n",
    "    return openai.ChatCompletion.create(**kwargs)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "d4063503-c0e0-4df7-9866-0815f4c9fdf0",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "mmlu_prompt = json.load(open('lib_prompt/mmlu-cot.json'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "bbbbe828-fad8-48a9-9cab-4a7e675ecf9e",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The following are multiple choice questions (with answers) about clinical knowledge.\n",
      "\n",
      "Q: Glycolysis is the name given to the pathway involving the conversion of:\n",
      "(A) glycogen to glucose-1-phosphate. (B) glycogen or glucose to fructose. (C) glycogen or glucose to pyruvate or lactate. (D) glycogen or glucose to pyruvate or acetyl CoA.\n",
      "A: Let's think step by step. We refer to Wikipedia articles on clinical knowledge for help. Glycolysis is the name given to the pathway involving conversion of glycogen or glucose to pyruvate or lactate. The answer is (C).\n",
      "\n",
      "Q: What is the difference between a male and a female catheter?\n",
      "(A) Male and female catheters are different colours. (B) Male catheters are longer than female catheters. (C) Male catheters are bigger than female catheters. (D) Female catheters are longer than male catheters.\n",
      "A: Let's think step by step. We refer to Wikipedia articles on clinical knowledge for help. The difference between a male and female catheter is that male catheters tend to be longer than female catheters. The answer is (B).\n",
      "\n",
      "Q: How many attempts should you make to cannulate a patient before passing the job on to a senior colleague, according to the medical knowledge of 2020?\n",
      "(A) 4 (B) 3 (C) 2 (D) 1\n",
      "A: Let's think step by step. We refer to Wikipedia articles on clinical knowledge for help. According to the medical protocol as of 2020, you should make two attempts to cannulate a patient before passing the job on to a more-senior practitioner. The answer is (C).\n",
      "\n",
      "Q: In the assessment of the hand function which of the following is true?\n",
      "(A) Abduction of the thumb is supplied by spinal root T2 (B) Opposition of the thumb by opponens policis is supplied by spinal root T1 (C) Finger adduction is supplied by the median nerve (D) Finger abduction is mediated by the palmar interossei\n",
      "A: Let's think step by step. We refer to Wikipedia articles on clinical knowledge for help. Of all the options, it is only true that the opposition of the thumb by opponens pollicis is supplied by spinal root T1. The answer is (B).\n",
      "\n",
      "Q: The energy for all forms of muscle contraction is provided by:\n",
      "(A) ATP. (B) ADP. (C) phosphocreatine. (D) oxidative phosphorylation.\n",
      "A: Let's think step by step. We refer to Wikipedia articles on clinical knowledge for help. The energy for muscular contraction is provided by ATP (adenosine triphosphate), which is the powerhouse of the cell. The answer is (A).\n"
     ]
    }
   ],
   "source": [
    "task = 'clinical_knowledge'\n",
    "print(mmlu_prompt[task])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "ce1c6b79-3530-4efe-bfd6-eead27d09ff3",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Downloading and preparing dataset mmlu/clinical_knowledge to /Users/yaofu/.cache/huggingface/datasets/lukaemon___mmlu/clinical_knowledge/1.0.0/134145dc2582b9a08b42d1f4b828f84a0066e9cc2e7dd8c1d83bee475746ecc3...\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "0ce31e15f0cf4ac8b9fb1c3a4b3de28b",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Generating test split:   0%|          | 0/264 [00:00<?, ? examples/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Generating validation split:   0%|          | 0/28 [00:00<?, ? examples/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "e55b43aa81cb4cf9be89fa7d1bc336b9",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Generating train split:   0%|          | 0/4 [00:00<?, ? examples/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Dataset mmlu downloaded and prepared to /Users/yaofu/.cache/huggingface/datasets/lukaemon___mmlu/clinical_knowledge/1.0.0/134145dc2582b9a08b42d1f4b828f84a0066e9cc2e7dd8c1d83bee475746ecc3. Subsequent calls will reuse this data.\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "37beaa09247d4216970a5f77bb373ff5",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "  0%|          | 0/3 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "task_data = load_dataset(\"lukaemon/mmlu\", task)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "0957327f-9454-4010-9501-b7086fbba125",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "264"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(task_data['test'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "5b18d727-13a7-45cd-a842-3462636d9c25",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'input': 'The key attribute in successful marathon running is:',\n",
       " 'A': 'strength.',\n",
       " 'B': 'power.',\n",
       " 'C': 'stride length.',\n",
       " 'D': 'stamina.',\n",
       " 'target': 'D'}"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "task_data['test'][0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "bec64ac3-96b4-45cd-b79e-6c8ad6fae234",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "prompt_q = mmlu_prompt[task] + \"\\n\\n\" + task_data['test'][0]['input'] + '\\n'\n",
    "for letter in ['A', 'B', 'C', 'D']:\n",
    "    prompt_q += '(' + letter + ') ' + task_data['test'][0][letter] + ' '\n",
    "prompt_q += \"\\nA: Let's think step by step.\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "8847b4b5-99fe-47ab-941b-5bd02c43755e",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The following are multiple choice questions (with answers) about clinical knowledge.\n",
      "\n",
      "Q: Glycolysis is the name given to the pathway involving the conversion of:\n",
      "(A) glycogen to glucose-1-phosphate. (B) glycogen or glucose to fructose. (C) glycogen or glucose to pyruvate or lactate. (D) glycogen or glucose to pyruvate or acetyl CoA.\n",
      "A: Let's think step by step. We refer to Wikipedia articles on clinical knowledge for help. Glycolysis is the name given to the pathway involving conversion of glycogen or glucose to pyruvate or lactate. The answer is (C).\n",
      "\n",
      "Q: What is the difference between a male and a female catheter?\n",
      "(A) Male and female catheters are different colours. (B) Male catheters are longer than female catheters. (C) Male catheters are bigger than female catheters. (D) Female catheters are longer than male catheters.\n",
      "A: Let's think step by step. We refer to Wikipedia articles on clinical knowledge for help. The difference between a male and female catheter is that male catheters tend to be longer than female catheters. The answer is (B).\n",
      "\n",
      "Q: How many attempts should you make to cannulate a patient before passing the job on to a senior colleague, according to the medical knowledge of 2020?\n",
      "(A) 4 (B) 3 (C) 2 (D) 1\n",
      "A: Let's think step by step. We refer to Wikipedia articles on clinical knowledge for help. According to the medical protocol as of 2020, you should make two attempts to cannulate a patient before passing the job on to a more-senior practitioner. The answer is (C).\n",
      "\n",
      "Q: In the assessment of the hand function which of the following is true?\n",
      "(A) Abduction of the thumb is supplied by spinal root T2 (B) Opposition of the thumb by opponens policis is supplied by spinal root T1 (C) Finger adduction is supplied by the median nerve (D) Finger abduction is mediated by the palmar interossei\n",
      "A: Let's think step by step. We refer to Wikipedia articles on clinical knowledge for help. Of all the options, it is only true that the opposition of the thumb by opponens pollicis is supplied by spinal root T1. The answer is (B).\n",
      "\n",
      "Q: The energy for all forms of muscle contraction is provided by:\n",
      "(A) ATP. (B) ADP. (C) phosphocreatine. (D) oxidative phosphorylation.\n",
      "A: Let's think step by step. We refer to Wikipedia articles on clinical knowledge for help. The energy for muscular contraction is provided by ATP (adenosine triphosphate), which is the powerhouse of the cell. The answer is (A).\n",
      "\n",
      "The key attribute in successful marathon running is:\n",
      "(A) strength. (B) power. (C) stride length. (D) stamina. \n",
      "A: Let's think step by step.\n"
     ]
    }
   ],
   "source": [
    "print(prompt_q)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "c91e1e78-0e6d-4d82-9600-b6c76637fa80",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "response = openai.ChatCompletion.create(\n",
    "    model=\"gpt-3.5-turbo\",\n",
    "    messages=[\n",
    "        {\"role\": \"system\", \"content\": \"Follow the given examples and answer the question.\"},\n",
    "        {\"role\": \"user\", \"content\": prompt_q},\n",
    "    ],\n",
    "    temperature=0, \n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "b1e7b952-30b3-43b3-aa11-06595a7f592c",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "We refer to Wikipedia articles on clinical knowledge for help. The key attribute in successful marathon running is stamina, which is the ability to maintain a steady pace over a long distance. The answer is (D).\n"
     ]
    }
   ],
   "source": [
    "print(response['choices'][0]['message']['content'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "867945a0-6527-409e-801e-4244eaf75e61",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "def test_answer_mmlu(pred_str, ans_str):\n",
    "    pattern = 'the answer is ('\n",
    "    pred = pred_str.lower().split(pattern)\n",
    "    \n",
    "    if(len(pred) > 1):\n",
    "        # print(pred)\n",
    "        pred = pred[1][0]\n",
    "        gold = ans_str.split('A:\\n')[1][0].lower()\n",
    "        # print('debug 1, pred %s, gold %s' % (pred, gold))\n",
    "        return pred == gold\n",
    "    else: \n",
    "        pred = 'C'\n",
    "        gold = ans_str.split('A:\\n')[1][0].lower()\n",
    "        # print('debug 2, pred %s, gold %s' % (pred, gold))\n",
    "        return pred == gold\n",
    "\n",
    "def parse_pred_ans(filename):\n",
    "    with open(filename) as fd: lines = fd.readlines()\n",
    "    am, a = None, None\n",
    "    num_q, acc = 0, 0\n",
    "    current_mode = 'none'\n",
    "    questions = []\n",
    "    ans_pred = []\n",
    "    ans_gold = []\n",
    "    for l in lines:\n",
    "        if(l.startswith('Q: ')):\n",
    "            if(am is not None and a is not None):\n",
    "                questions.append(q)\n",
    "                ans_pred.append(am)\n",
    "                ans_gold.append(a)\n",
    "                # print(am)\n",
    "                # print(a)\n",
    "                if(test_answer_mmlu(am, a)):\n",
    "                    acc += 1\n",
    "            current_mode = 'q'\n",
    "            q = l\n",
    "            num_q += 1\n",
    "        elif(l.startswith('A_model:')):\n",
    "            current_mode = 'am'\n",
    "            am = l\n",
    "        elif(l.startswith('A:')):\n",
    "            current_mode = 'a'\n",
    "            a = l\n",
    "        else:\n",
    "            if(current_mode == 'q'): q += l\n",
    "            elif(current_mode == 'am'): am += l\n",
    "            elif(current_mode == 'a'): a += l\n",
    "            else:\n",
    "                raise ValueError(current_mode)\n",
    "                \n",
    "    questions.append(q)\n",
    "    ans_pred.append(am)\n",
    "    ans_gold.append(a)\n",
    "    # print(am)\n",
    "    # print(a)\n",
    "    if(test_answer_mmlu(am, a)):\n",
    "        acc += 1\n",
    "    print('num_q %d correct %d ratio %.4f' % (num_q, acc, float(acc / num_q)))\n",
    "    return questions, ans_pred, ans_gold\n",
    "\n",
    "def test_finished(ans_model):\n",
    "    if('answer is' in ans_model): return True\n",
    "    else: return False\n",
    "\n",
    "def extract_ans(ans_model):\n",
    "    ans_model = ans_model.split('\\n')\n",
    "    ans = []\n",
    "    residual = []\n",
    "    for li, al in enumerate(ans_model):\n",
    "        ans.append(al)\n",
    "        if('answer is' in al):\n",
    "            break\n",
    "    residual = list(ans_model[li + 1:])\n",
    "    ans = '\\n'.join(ans)\n",
    "    residual = '\\n'.join(residual)\n",
    "    return ans, residual"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "b398b88e-d8fd-47fc-be03-f4627f6719e1",
   "metadata": {
    "collapsed": true,
    "jupyter": {
     "outputs_hidden": true
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "  0%|                                                                                                                                                                                       | 0/264 [00:00<?, ?it/s]\u001b[A\n",
      "  0%|▋                                                                                                                                                                              | 1/264 [00:00<04:10,  1.05it/s]\u001b[A\n",
      "  1%|█▎                                                                                                                                                                             | 2/264 [00:01<03:49,  1.14it/s]\u001b[A\n",
      "  1%|█▉                                                                                                                                                                             | 3/264 [00:02<04:05,  1.06it/s]\u001b[A\n",
      "  2%|██▋                                                                                                                                                                            | 4/264 [00:03<04:11,  1.03it/s]\u001b[A\n",
      "  2%|███▎                                                                                                                                                                           | 5/264 [00:04<03:47,  1.14it/s]\u001b[A\n",
      "  2%|███▉                                                                                                                                                                           | 6/264 [00:05<04:01,  1.07it/s]\u001b[A\n",
      "  3%|████▋                                                                                                                                                                          | 7/264 [00:06<04:00,  1.07it/s]\u001b[A\n",
      "  3%|█████▎                                                                                                                                                                         | 8/264 [00:07<03:45,  1.13it/s]\u001b[A\n",
      "  3%|█████▉                                                                                                                                                                         | 9/264 [00:08<03:40,  1.16it/s]\u001b[A\n",
      "  4%|██████▌                                                                                                                                                                       | 10/264 [00:09<04:40,  1.11s/it]\u001b[A\n",
      "  4%|███████▎                                                                                                                                                                      | 11/264 [00:11<05:47,  1.37s/it]\u001b[A\n",
      "  5%|███████▉                                                                                                                                                                      | 12/264 [00:12<05:33,  1.32s/it]\u001b[A\n",
      "  5%|████████▌                                                                                                                                                                     | 13/264 [00:13<04:45,  1.14s/it]\u001b[A\n",
      "  5%|█████████▏                                                                                                                                                                    | 14/264 [00:14<04:11,  1.01s/it]\u001b[A\n",
      "  6%|█████████▉                                                                                                                                                                    | 15/264 [00:15<04:43,  1.14s/it]\u001b[A\n",
      "  6%|██████████▌                                                                                                                                                                   | 16/264 [00:18<06:04,  1.47s/it]\u001b[A\n",
      "  6%|███████████▏                                                                                                                                                                  | 17/264 [00:18<05:06,  1.24s/it]\u001b[A\n",
      "  7%|███████████▊                                                                                                                                                                  | 18/264 [00:19<04:25,  1.08s/it]\u001b[A\n",
      "  7%|████████████▌                                                                                                                                                                 | 19/264 [00:21<05:59,  1.47s/it]\u001b[A\n",
      "  8%|█████████████▏                                                                                                                                                                | 20/264 [00:22<05:37,  1.38s/it]\u001b[A\n",
      "  8%|█████████████▊                                                                                                                                                                | 21/264 [00:24<05:15,  1.30s/it]\u001b[A\n",
      "  8%|██████████████▌                                                                                                                                                               | 22/264 [00:25<05:22,  1.33s/it]\u001b[A\n",
      "  9%|███████████████▏                                                                                                                                                              | 23/264 [00:26<04:46,  1.19s/it]\u001b[A\n",
      "  9%|███████████████▊                                                                                                                                                              | 24/264 [00:27<04:26,  1.11s/it]\u001b[A\n",
      "  9%|████████████████▍                                                                                                                                                             | 25/264 [00:28<04:28,  1.12s/it]\u001b[A\n",
      " 10%|█████████████████▏                                                                                                                                                            | 26/264 [00:29<04:48,  1.21s/it]\u001b[A\n",
      " 10%|█████████████████▊                                                                                                                                                            | 27/264 [00:31<04:53,  1.24s/it]\u001b[A\n",
      " 11%|██████████████████▍                                                                                                                                                           | 28/264 [00:32<04:40,  1.19s/it]\u001b[A\n",
      " 11%|███████████████████                                                                                                                                                           | 29/264 [00:33<04:21,  1.11s/it]\u001b[A\n",
      " 11%|███████████████████▊                                                                                                                                                          | 30/264 [00:34<04:12,  1.08s/it]\u001b[A\n",
      " 12%|████████████████████▍                                                                                                                                                         | 31/264 [00:35<03:58,  1.02s/it]\u001b[A\n",
      " 12%|█████████████████████                                                                                                                                                         | 32/264 [00:35<03:50,  1.01it/s]\u001b[A\n",
      " 12%|█████████████████████▊                                                                                                                                                        | 33/264 [00:37<04:01,  1.04s/it]\u001b[A\n",
      " 13%|██████████████████████▍                                                                                                                                                       | 34/264 [00:37<03:41,  1.04it/s]\u001b[A\n",
      " 13%|███████████████████████                                                                                                                                                       | 35/264 [00:38<03:34,  1.07it/s]\u001b[A\n",
      " 14%|███████████████████████▋                                                                                                                                                      | 36/264 [00:39<03:21,  1.13it/s]\u001b[A\n",
      " 14%|████████████████████████▍                                                                                                                                                     | 37/264 [00:40<03:26,  1.10it/s]\u001b[A\n",
      " 14%|█████████████████████████                                                                                                                                                     | 38/264 [00:41<03:23,  1.11it/s]\u001b[A\n",
      " 15%|█████████████████████████▋                                                                                                                                                    | 39/264 [00:42<04:02,  1.08s/it]\u001b[A\n",
      " 15%|██████████████████████████▎                                                                                                                                                   | 40/264 [00:43<03:58,  1.07s/it]\u001b[A\n",
      " 16%|███████████████████████████                                                                                                                                                   | 41/264 [00:44<03:53,  1.05s/it]\u001b[A\n",
      " 16%|███████████████████████████▋                                                                                                                                                  | 42/264 [00:47<05:15,  1.42s/it]\u001b[A\n",
      " 16%|████████████████████████████▎                                                                                                                                                 | 43/264 [00:48<04:38,  1.26s/it]\u001b[A\n",
      " 17%|█████████████████████████████                                                                                                                                                 | 44/264 [00:49<04:29,  1.22s/it]\u001b[A\n",
      " 17%|█████████████████████████████▋                                                                                                                                                | 45/264 [00:50<04:09,  1.14s/it]\u001b[A\n",
      " 17%|██████████████████████████████▎                                                                                                                                               | 46/264 [00:51<04:05,  1.13s/it]\u001b[A\n",
      " 18%|██████████████████████████████▉                                                                                                                                               | 47/264 [00:52<03:48,  1.05s/it]\u001b[A\n",
      " 18%|███████████████████████████████▋                                                                                                                                              | 48/264 [00:53<03:40,  1.02s/it]\u001b[A\n",
      " 19%|████████████████████████████████▎                                                                                                                                             | 49/264 [00:53<03:25,  1.04it/s]\u001b[A\n",
      " 19%|████████████████████████████████▉                                                                                                                                             | 50/264 [00:54<03:29,  1.02it/s]\u001b[A\n",
      " 19%|█████████████████████████████████▌                                                                                                                                            | 51/264 [00:55<03:18,  1.07it/s]\u001b[A\n",
      " 20%|██████████████████████████████████▎                                                                                                                                           | 52/264 [00:57<03:41,  1.04s/it]\u001b[A\n",
      " 20%|██████████████████████████████████▉                                                                                                                                           | 53/264 [00:58<04:04,  1.16s/it]\u001b[A\n",
      " 20%|███████████████████████████████████▌                                                                                                                                          | 54/264 [00:59<03:56,  1.13s/it]\u001b[A\n",
      " 21%|████████████████████████████████████▎                                                                                                                                         | 55/264 [01:01<04:25,  1.27s/it]\u001b[A\n",
      " 21%|████████████████████████████████████▉                                                                                                                                         | 56/264 [01:02<04:30,  1.30s/it]\u001b[A\n",
      " 22%|█████████████████████████████████████▌                                                                                                                                        | 57/264 [01:03<04:23,  1.27s/it]\u001b[A\n",
      " 22%|██████████████████████████████████████▏                                                                                                                                       | 58/264 [01:04<03:51,  1.13s/it]\u001b[A\n",
      " 22%|██████████████████████████████████████▉                                                                                                                                       | 59/264 [01:05<03:42,  1.09s/it]\u001b[A\n",
      " 23%|███████████████████████████████████████▌                                                                                                                                      | 60/264 [01:06<03:21,  1.01it/s]\u001b[A\n",
      " 23%|████████████████████████████████████████▏                                                                                                                                     | 61/264 [01:07<03:26,  1.02s/it]\u001b[A\n",
      " 23%|████████████████████████████████████████▊                                                                                                                                     | 62/264 [01:08<03:13,  1.04it/s]\u001b[A\n",
      " 24%|█████████████████████████████████████████▌                                                                                                                                    | 63/264 [01:09<03:18,  1.02it/s]\u001b[A\n",
      " 24%|██████████████████████████████████████████▏                                                                                                                                   | 64/264 [01:10<03:11,  1.05it/s]\u001b[A\n",
      " 25%|██████████████████████████████████████████▊                                                                                                                                   | 65/264 [01:11<03:29,  1.05s/it]\u001b[A\n",
      " 25%|███████████████████████████████████████████▌                                                                                                                                  | 66/264 [01:12<03:13,  1.02it/s]\u001b[A\n",
      " 25%|████████████████████████████████████████████▏                                                                                                                                 | 67/264 [01:12<02:57,  1.11it/s]\u001b[A\n",
      " 26%|████████████████████████████████████████████▊                                                                                                                                 | 68/264 [01:13<03:02,  1.07it/s]\u001b[A\n",
      " 26%|█████████████████████████████████████████████▍                                                                                                                                | 69/264 [01:15<03:36,  1.11s/it]\u001b[A\n",
      " 27%|██████████████████████████████████████████████▏                                                                                                                               | 70/264 [01:16<03:23,  1.05s/it]\u001b[A\n",
      " 27%|██████████████████████████████████████████████▊                                                                                                                               | 71/264 [01:17<03:02,  1.06it/s]\u001b[A\n",
      " 27%|███████████████████████████████████████████████▍                                                                                                                              | 72/264 [01:18<03:07,  1.02it/s]\u001b[A\n",
      " 28%|████████████████████████████████████████████████                                                                                                                              | 73/264 [01:19<03:04,  1.03it/s]\u001b[A\n",
      " 28%|████████████████████████████████████████████████▊                                                                                                                             | 74/264 [01:20<03:02,  1.04it/s]\u001b[A\n",
      " 28%|█████████████████████████████████████████████████▍                                                                                                                            | 75/264 [01:21<03:15,  1.04s/it]\u001b[A\n",
      " 29%|██████████████████████████████████████████████████                                                                                                                            | 76/264 [01:23<04:00,  1.28s/it]\u001b[A\n",
      " 29%|██████████████████████████████████████████████████▊                                                                                                                           | 77/264 [01:24<03:54,  1.25s/it]\u001b[A\n",
      " 30%|███████████████████████████████████████████████████▍                                                                                                                          | 78/264 [01:25<03:33,  1.15s/it]\u001b[A\n",
      " 30%|████████████████████████████████████████████████████                                                                                                                          | 79/264 [01:26<03:21,  1.09s/it]\u001b[A\n",
      " 30%|████████████████████████████████████████████████████▋                                                                                                                         | 80/264 [01:27<03:54,  1.28s/it]\u001b[A\n",
      " 31%|█████████████████████████████████████████████████████▍                                                                                                                        | 81/264 [01:28<03:28,  1.14s/it]\u001b[A\n",
      " 31%|██████████████████████████████████████████████████████                                                                                                                        | 82/264 [01:30<04:00,  1.32s/it]\u001b[A\n",
      " 31%|██████████████████████████████████████████████████████▋                                                                                                                       | 83/264 [01:32<04:38,  1.54s/it]\u001b[A\n",
      " 32%|███████████████████████████████████████████████████████▎                                                                                                                      | 84/264 [01:34<04:44,  1.58s/it]\u001b[A\n",
      " 32%|████████████████████████████████████████████████████████                                                                                                                      | 85/264 [01:35<04:30,  1.51s/it]\u001b[A\n",
      " 33%|████████████████████████████████████████████████████████▋                                                                                                                     | 86/264 [01:36<03:53,  1.31s/it]\u001b[A\n",
      " 33%|█████████████████████████████████████████████████████████▎                                                                                                                    | 87/264 [01:37<03:32,  1.20s/it]\u001b[A\n",
      " 33%|██████████████████████████████████████████████████████████                                                                                                                    | 88/264 [01:38<03:29,  1.19s/it]\u001b[A\n",
      " 34%|██████████████████████████████████████████████████████████▋                                                                                                                   | 89/264 [01:39<03:15,  1.12s/it]\u001b[A\n",
      " 34%|███████████████████████████████████████████████████████████▎                                                                                                                  | 90/264 [01:40<03:12,  1.10s/it]\u001b[A\n",
      " 34%|███████████████████████████████████████████████████████████▉                                                                                                                  | 91/264 [01:41<03:11,  1.11s/it]\u001b[A\n",
      " 35%|████████████████████████████████████████████████████████████▋                                                                                                                 | 92/264 [01:42<02:57,  1.03s/it]\u001b[A\n",
      " 35%|█████████████████████████████████████████████████████████████▎                                                                                                                | 93/264 [01:43<03:07,  1.10s/it]\u001b[A\n",
      " 36%|█████████████████████████████████████████████████████████████▉                                                                                                                | 94/264 [01:44<02:59,  1.06s/it]\u001b[A\n",
      " 36%|██████████████████████████████████████████████████████████████▌                                                                                                               | 95/264 [01:46<03:24,  1.21s/it]\u001b[A\n",
      " 36%|███████████████████████████████████████████████████████████████▎                                                                                                              | 96/264 [01:47<03:25,  1.22s/it]\u001b[A\n",
      " 37%|███████████████████████████████████████████████████████████████▉                                                                                                              | 97/264 [01:48<03:32,  1.27s/it]\u001b[A\n",
      " 37%|████████████████████████████████████████████████████████████████▌                                                                                                             | 98/264 [01:49<03:09,  1.14s/it]\u001b[A\n",
      " 38%|█████████████████████████████████████████████████████████████████▎                                                                                                            | 99/264 [01:51<03:22,  1.23s/it]\u001b[A\n",
      " 38%|█████████████████████████████████████████████████████████████████▌                                                                                                           | 100/264 [01:52<03:30,  1.28s/it]\u001b[A\n",
      " 38%|██████████████████████████████████████████████████████████████████▏                                                                                                          | 101/264 [01:53<03:19,  1.22s/it]\u001b[A\n",
      " 39%|██████████████████████████████████████████████████████████████████▊                                                                                                          | 102/264 [01:54<03:05,  1.14s/it]\u001b[A\n",
      " 39%|███████████████████████████████████████████████████████████████████▍                                                                                                         | 103/264 [01:55<03:04,  1.15s/it]\u001b[A\n",
      " 39%|████████████████████████████████████████████████████████████████████▏                                                                                                        | 104/264 [01:56<02:51,  1.07s/it]\u001b[A\n",
      " 40%|████████████████████████████████████████████████████████████████████▊                                                                                                        | 105/264 [01:57<02:54,  1.10s/it]\u001b[A\n",
      " 40%|█████████████████████████████████████████████████████████████████████▍                                                                                                       | 106/264 [01:58<02:46,  1.05s/it]\u001b[A\n",
      " 41%|██████████████████████████████████████████████████████████████████████                                                                                                       | 107/264 [02:01<03:52,  1.48s/it]\u001b[A\n",
      " 41%|██████████████████████████████████████████████████████████████████████▊                                                                                                      | 108/264 [02:02<03:23,  1.31s/it]\u001b[A\n",
      " 41%|███████████████████████████████████████████████████████████████████████▍                                                                                                     | 109/264 [02:03<03:22,  1.31s/it]\u001b[A\n",
      " 42%|████████████████████████████████████████████████████████████████████████                                                                                                     | 110/264 [02:04<03:13,  1.25s/it]\u001b[A\n",
      " 42%|████████████████████████████████████████████████████████████████████████▋                                                                                                    | 111/264 [02:05<03:17,  1.29s/it]\u001b[A\n",
      " 42%|█████████████████████████████████████████████████████████████████████████▍                                                                                                   | 112/264 [02:06<03:02,  1.20s/it]\u001b[A\n",
      " 43%|██████████████████████████████████████████████████████████████████████████                                                                                                   | 113/264 [02:07<02:45,  1.09s/it]\u001b[A\n",
      " 43%|██████████████████████████████████████████████████████████████████████████▋                                                                                                  | 114/264 [02:08<02:29,  1.01it/s]\u001b[A\n",
      " 44%|███████████████████████████████████████████████████████████████████████████▎                                                                                                 | 115/264 [02:09<02:35,  1.04s/it]\u001b[A\n",
      " 44%|████████████████████████████████████████████████████████████████████████████                                                                                                 | 116/264 [02:10<02:32,  1.03s/it]\u001b[A\n",
      " 44%|████████████████████████████████████████████████████████████████████████████▋                                                                                                | 117/264 [02:11<02:43,  1.11s/it]\u001b[A\n",
      " 45%|█████████████████████████████████████████████████████████████████████████████▎                                                                                               | 118/264 [02:13<03:12,  1.32s/it]\u001b[A\n",
      " 45%|█████████████████████████████████████████████████████████████████████████████▉                                                                                               | 119/264 [02:15<03:15,  1.35s/it]\u001b[A\n",
      " 45%|██████████████████████████████████████████████████████████████████████████████▋                                                                                              | 120/264 [02:16<03:08,  1.31s/it]\u001b[A\n",
      " 46%|███████████████████████████████████████████████████████████████████████████████▎                                                                                             | 121/264 [02:17<02:47,  1.17s/it]\u001b[A\n",
      " 46%|███████████████████████████████████████████████████████████████████████████████▉                                                                                             | 122/264 [02:18<02:40,  1.13s/it]\u001b[A\n",
      " 47%|████████████████████████████████████████████████████████████████████████████████▌                                                                                            | 123/264 [02:20<03:14,  1.38s/it]\u001b[A\n",
      " 47%|█████████████████████████████████████████████████████████████████████████████████▎                                                                                           | 124/264 [02:21<02:55,  1.25s/it]\u001b[A\n",
      " 47%|█████████████████████████████████████████████████████████████████████████████████▉                                                                                           | 125/264 [02:22<02:34,  1.11s/it]\u001b[A\n",
      " 48%|██████████████████████████████████████████████████████████████████████████████████▌                                                                                          | 126/264 [02:23<02:35,  1.13s/it]\u001b[A\n",
      " 48%|███████████████████████████████████████████████████████████████████████████████████▏                                                                                         | 127/264 [02:24<02:45,  1.21s/it]\u001b[A\n",
      " 48%|███████████████████████████████████████████████████████████████████████████████████▉                                                                                         | 128/264 [02:25<02:39,  1.17s/it]\u001b[A\n",
      " 49%|████████████████████████████████████████████████████████████████████████████████████▌                                                                                        | 129/264 [02:26<02:29,  1.10s/it]\u001b[A\n",
      " 49%|█████████████████████████████████████████████████████████████████████████████████████▏                                                                                       | 130/264 [02:27<02:23,  1.07s/it]\u001b[A\n",
      " 50%|█████████████████████████████████████████████████████████████████████████████████████▊                                                                                       | 131/264 [02:28<02:25,  1.09s/it]\u001b[A\n",
      " 50%|██████████████████████████████████████████████████████████████████████████████████████▌                                                                                      | 132/264 [02:29<02:14,  1.02s/it]\u001b[A\n",
      " 50%|███████████████████████████████████████████████████████████████████████████████████████▏                                                                                     | 133/264 [02:30<02:09,  1.01it/s]\u001b[A\n",
      " 51%|███████████████████████████████████████████████████████████████████████████████████████▊                                                                                     | 134/264 [02:31<02:04,  1.05it/s]\u001b[A\n",
      " 51%|████████████████████████████████████████████████████████████████████████████████████████▍                                                                                    | 135/264 [02:32<02:08,  1.00it/s]\u001b[A\n",
      " 52%|█████████████████████████████████████████████████████████████████████████████████████████                                                                                    | 136/264 [02:35<03:43,  1.75s/it]\u001b[A\n",
      " 52%|█████████████████████████████████████████████████████████████████████████████████████████▊                                                                                   | 137/264 [02:36<03:13,  1.52s/it]\u001b[A\n",
      " 52%|██████████████████████████████████████████████████████████████████████████████████████████▍                                                                                  | 138/264 [02:38<02:54,  1.38s/it]\u001b[A\n",
      " 53%|███████████████████████████████████████████████████████████████████████████████████████████                                                                                  | 139/264 [02:38<02:30,  1.21s/it]\u001b[A\n",
      " 53%|███████████████████████████████████████████████████████████████████████████████████████████▋                                                                                 | 140/264 [02:39<02:21,  1.14s/it]\u001b[A\n",
      " 53%|████████████████████████████████████████████████████████████████████████████████████████████▍                                                                                | 141/264 [02:40<02:15,  1.10s/it]\u001b[A\n",
      " 54%|█████████████████████████████████████████████████████████████████████████████████████████████                                                                                | 142/264 [02:41<02:01,  1.01it/s]\u001b[A\n",
      " 54%|█████████████████████████████████████████████████████████████████████████████████████████████▋                                                                               | 143/264 [02:42<02:13,  1.10s/it]\u001b[A\n",
      " 55%|██████████████████████████████████████████████████████████████████████████████████████████████▎                                                                              | 144/264 [02:43<02:01,  1.01s/it]\u001b[A\n",
      " 55%|███████████████████████████████████████████████████████████████████████████████████████████████                                                                              | 145/264 [02:44<01:53,  1.05it/s]\u001b[A\n",
      " 55%|███████████████████████████████████████████████████████████████████████████████████████████████▋                                                                             | 146/264 [02:45<01:57,  1.00it/s]\u001b[A\n",
      " 56%|████████████████████████████████████████████████████████████████████████████████████████████████▎                                                                            | 147/264 [02:46<01:58,  1.01s/it]\u001b[A\n",
      " 56%|████████████████████████████████████████████████████████████████████████████████████████████████▉                                                                            | 148/264 [02:47<02:01,  1.05s/it]\u001b[A\n",
      " 56%|█████████████████████████████████████████████████████████████████████████████████████████████████▋                                                                           | 149/264 [02:48<02:03,  1.07s/it]\u001b[A\n",
      " 57%|██████████████████████████████████████████████████████████████████████████████████████████████████▎                                                                          | 150/264 [02:50<02:34,  1.36s/it]\u001b[A\n",
      " 57%|██████████████████████████████████████████████████████████████████████████████████████████████████▉                                                                          | 151/264 [02:52<02:25,  1.29s/it]\u001b[A\n",
      " 58%|███████████████████████████████████████████████████████████████████████████████████████████████████▌                                                                         | 152/264 [02:53<02:19,  1.24s/it]\u001b[A\n",
      " 58%|████████████████████████████████████████████████████████████████████████████████████████████████████▎                                                                        | 153/264 [02:54<02:09,  1.16s/it]\u001b[A\n",
      " 58%|████████████████████████████████████████████████████████████████████████████████████████████████████▉                                                                        | 154/264 [02:55<01:55,  1.05s/it]\u001b[A\n",
      " 59%|█████████████████████████████████████████████████████████████████████████████████████████████████████▌                                                                       | 155/264 [02:56<01:56,  1.06s/it]\u001b[A\n",
      " 59%|██████████████████████████████████████████████████████████████████████████████████████████████████████▏                                                                      | 156/264 [02:58<02:24,  1.34s/it]\u001b[A\n",
      " 59%|██████████████████████████████████████████████████████████████████████████████████████████████████████▉                                                                      | 157/264 [02:59<02:28,  1.39s/it]\u001b[A\n",
      " 60%|███████████████████████████████████████████████████████████████████████████████████████████████████████▌                                                                     | 158/264 [03:00<02:23,  1.35s/it]\u001b[A\n",
      " 60%|████████████████████████████████████████████████████████████████████████████████████████████████████████▏                                                                    | 159/264 [03:01<02:12,  1.26s/it]\u001b[A\n",
      " 61%|████████████████████████████████████████████████████████████████████████████████████████████████████████▊                                                                    | 160/264 [03:02<01:56,  1.12s/it]\u001b[A\n",
      " 61%|█████████████████████████████████████████████████████████████████████████████████████████████████████████▌                                                                   | 161/264 [03:03<01:46,  1.03s/it]\u001b[A\n",
      " 61%|██████████████████████████████████████████████████████████████████████████████████████████████████████████▏                                                                  | 162/264 [03:06<02:54,  1.71s/it]\u001b[A\n",
      " 62%|██████████████████████████████████████████████████████████████████████████████████████████████████████████▊                                                                  | 163/264 [03:08<02:40,  1.59s/it]\u001b[A\n",
      " 62%|███████████████████████████████████████████████████████████████████████████████████████████████████████████▍                                                                 | 164/264 [03:10<02:52,  1.73s/it]\u001b[A\n",
      " 62%|████████████████████████████████████████████████████████████████████████████████████████████████████████████▏                                                                | 165/264 [03:10<02:23,  1.45s/it]\u001b[A\n",
      " 63%|████████████████████████████████████████████████████████████████████████████████████████████████████████████▊                                                                | 166/264 [03:12<02:11,  1.34s/it]\u001b[A\n",
      " 63%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████▍                                                               | 167/264 [03:13<02:15,  1.40s/it]\u001b[A\n",
      " 64%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████                                                               | 168/264 [03:14<01:58,  1.24s/it]\u001b[A\n",
      " 64%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████▋                                                              | 169/264 [03:15<01:45,  1.11s/it]\u001b[A\n",
      " 64%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████▍                                                             | 170/264 [03:16<01:45,  1.12s/it]\u001b[A\n",
      " 65%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████                                                             | 171/264 [03:17<01:38,  1.06s/it]\u001b[A\n",
      " 65%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋                                                            | 172/264 [03:18<01:36,  1.05s/it]\u001b[A\n",
      " 66%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎                                                           | 173/264 [03:19<01:48,  1.19s/it]\u001b[A\n",
      " 66%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████                                                           | 174/264 [03:20<01:42,  1.14s/it]\u001b[A\n",
      " 66%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋                                                          | 175/264 [03:21<01:36,  1.08s/it]\u001b[A\n",
      " 67%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎                                                         | 176/264 [03:22<01:30,  1.03s/it]\u001b[A\n",
      " 67%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉                                                         | 177/264 [03:23<01:30,  1.04s/it]\u001b[A\n",
      " 67%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋                                                        | 178/264 [03:24<01:20,  1.07it/s]\u001b[A\n",
      " 68%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎                                                       | 179/264 [03:25<01:24,  1.01it/s]\u001b[A\n",
      " 68%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉                                                       | 180/264 [03:26<01:23,  1.00it/s]\u001b[A\n",
      " 69%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌                                                      | 181/264 [03:27<01:21,  1.02it/s]\u001b[A\n",
      " 69%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎                                                     | 182/264 [03:28<01:18,  1.05it/s]\u001b[A\n",
      " 69%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉                                                     | 183/264 [03:29<01:30,  1.12s/it]\u001b[A\n",
      " 70%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌                                                    | 184/264 [03:30<01:25,  1.07s/it]\u001b[A\n",
      " 70%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏                                                   | 185/264 [03:31<01:15,  1.05it/s]\u001b[A\n",
      " 70%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉                                                   | 186/264 [03:32<01:15,  1.03it/s]\u001b[A\n",
      " 71%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌                                                  | 187/264 [03:33<01:09,  1.10it/s]\u001b[A\n",
      " 71%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏                                                 | 188/264 [03:34<01:14,  1.02it/s]\u001b[A\n",
      " 72%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊                                                 | 189/264 [03:35<01:16,  1.02s/it]\u001b[A\n",
      " 72%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌                                                | 190/264 [03:36<01:17,  1.04s/it]\u001b[A\n",
      " 72%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏                                               | 191/264 [03:37<01:16,  1.05s/it]\u001b[A\n",
      " 73%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊                                               | 192/264 [03:38<01:13,  1.02s/it]\u001b[A\n",
      " 73%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍                                              | 193/264 [03:39<01:07,  1.05it/s]\u001b[A\n",
      " 73%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏                                             | 194/264 [03:40<01:14,  1.06s/it]\u001b[A\n",
      " 74%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊                                             | 195/264 [03:41<01:14,  1.08s/it]\u001b[A\n",
      " 74%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍                                            | 196/264 [03:43<01:18,  1.16s/it]\u001b[A\n",
      " 75%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████                                            | 197/264 [03:44<01:08,  1.03s/it]\u001b[A\n",
      " 75%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊                                           | 198/264 [03:44<01:01,  1.08it/s]\u001b[A\n",
      " 75%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍                                          | 199/264 [03:45<00:58,  1.11it/s]\u001b[A\n",
      " 76%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████                                          | 200/264 [03:47<01:08,  1.07s/it]\u001b[A\n",
      " 76%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋                                         | 201/264 [03:47<01:03,  1.00s/it]\u001b[A\n",
      " 77%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎                                        | 202/264 [03:49<01:05,  1.06s/it]\u001b[A\n",
      " 77%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████                                        | 203/264 [03:50<01:05,  1.07s/it]\u001b[A\n",
      " 77%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋                                       | 204/264 [03:50<00:59,  1.02it/s]\u001b[A\n",
      " 78%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎                                      | 205/264 [03:51<00:56,  1.04it/s]\u001b[A\n",
      " 78%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉                                      | 206/264 [03:53<01:01,  1.05s/it]\u001b[A\n",
      " 78%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋                                     | 207/264 [03:54<01:05,  1.15s/it]\u001b[A\n",
      " 79%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎                                    | 208/264 [03:55<01:02,  1.11s/it]\u001b[A\n",
      " 79%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉                                    | 209/264 [03:57<01:07,  1.24s/it]\u001b[A\n",
      " 80%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌                                   | 210/264 [03:57<01:01,  1.13s/it]\u001b[A\n",
      " 80%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎                                  | 211/264 [03:58<00:57,  1.09s/it]\u001b[A\n",
      " 80%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉                                  | 212/264 [04:00<00:59,  1.13s/it]\u001b[A\n",
      " 81%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌                                 | 213/264 [04:01<00:53,  1.05s/it]\u001b[A\n",
      " 81%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏                                | 214/264 [04:02<00:52,  1.04s/it]\u001b[A\n",
      " 81%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉                                | 215/264 [04:03<01:00,  1.24s/it]\u001b[A\n",
      " 82%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌                               | 216/264 [04:04<00:53,  1.12s/it]\u001b[A\n",
      " 82%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏                              | 217/264 [04:05<00:51,  1.09s/it]\u001b[A\n",
      " 83%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊                              | 218/264 [04:07<00:59,  1.29s/it]\u001b[A\n",
      " 83%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌                             | 219/264 [04:08<00:53,  1.18s/it]\u001b[A\n",
      " 83%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏                            | 220/264 [04:08<00:45,  1.03s/it]\u001b[A\n",
      " 84%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊                            | 221/264 [04:09<00:42,  1.01it/s]\u001b[A\n",
      " 84%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍                           | 222/264 [04:11<00:45,  1.07s/it]\u001b[A\n",
      " 84%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏                          | 223/264 [04:12<00:42,  1.05s/it]\u001b[A\n",
      " 85%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊                          | 224/264 [04:13<00:47,  1.19s/it]\u001b[A\n",
      " 85%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍                         | 225/264 [04:15<00:52,  1.34s/it]\u001b[A\n",
      " 86%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████                         | 226/264 [04:16<00:47,  1.25s/it]\u001b[A\n",
      " 86%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊                        | 227/264 [04:17<00:44,  1.21s/it]\u001b[A\n",
      " 86%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍                       | 228/264 [04:18<00:39,  1.08s/it]\u001b[A\n",
      " 87%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████                       | 229/264 [04:19<00:37,  1.07s/it]\u001b[A\n",
      " 87%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋                      | 230/264 [04:20<00:35,  1.04s/it]\u001b[A\n",
      " 88%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍                     | 231/264 [04:21<00:36,  1.10s/it]\u001b[A\n",
      " 88%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████                     | 232/264 [04:22<00:33,  1.03s/it]\u001b[A\n",
      " 88%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋                    | 233/264 [04:23<00:28,  1.08it/s]\u001b[A\n",
      " 89%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎                   | 234/264 [04:25<00:37,  1.24s/it]\u001b[A\n",
      " 89%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉                   | 235/264 [04:25<00:32,  1.14s/it]\u001b[A\n",
      " 89%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋                  | 236/264 [04:26<00:29,  1.06s/it]\u001b[A\n",
      " 90%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎                 | 237/264 [04:27<00:27,  1.00s/it]\u001b[A\n",
      " 90%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉                 | 238/264 [04:28<00:25,  1.03it/s]\u001b[A\n",
      " 91%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌                | 239/264 [04:29<00:24,  1.03it/s]\u001b[A\n",
      " 91%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎               | 240/264 [04:31<00:27,  1.16s/it]\u001b[A\n",
      " 91%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉               | 241/264 [04:31<00:23,  1.02s/it]\u001b[A\n",
      " 92%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌              | 242/264 [04:32<00:21,  1.02it/s]\u001b[A\n",
      " 92%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏             | 243/264 [04:33<00:20,  1.03it/s]\u001b[A\n",
      " 92%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉             | 244/264 [04:34<00:19,  1.02it/s]\u001b[A\n",
      " 93%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌            | 245/264 [04:35<00:20,  1.06s/it]\u001b[A\n",
      " 93%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏           | 246/264 [04:37<00:20,  1.14s/it]\u001b[A\n",
      " 94%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊           | 247/264 [04:38<00:20,  1.20s/it]\u001b[A\n",
      " 94%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌          | 248/264 [04:39<00:17,  1.09s/it]\u001b[A\n",
      " 94%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏         | 249/264 [04:40<00:15,  1.06s/it]\u001b[A\n",
      " 95%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊         | 250/264 [04:41<00:15,  1.11s/it]\u001b[A\n",
      " 95%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍        | 251/264 [04:43<00:15,  1.19s/it]\u001b[A\n",
      " 95%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏       | 252/264 [04:44<00:13,  1.13s/it]\u001b[A\n",
      " 96%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊       | 253/264 [04:45<00:12,  1.11s/it]\u001b[A\n",
      " 96%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍      | 254/264 [04:46<00:11,  1.15s/it]\u001b[A\n",
      " 97%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████      | 255/264 [04:47<00:10,  1.20s/it]\u001b[A\n",
      " 97%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊     | 256/264 [04:48<00:09,  1.14s/it]\u001b[A\n",
      " 97%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍    | 257/264 [04:49<00:07,  1.05s/it]\u001b[A\n",
      " 98%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████    | 258/264 [04:50<00:06,  1.09s/it]\u001b[A\n",
      " 98%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋   | 259/264 [04:52<00:05,  1.16s/it]\u001b[A\n",
      " 98%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍  | 260/264 [04:53<00:04,  1.18s/it]\u001b[A\n",
      " 99%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████  | 261/264 [04:54<00:03,  1.08s/it]\u001b[A\n",
      " 99%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋ | 262/264 [04:55<00:02,  1.07s/it]\u001b[A\n",
      "100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎| 263/264 [04:56<00:01,  1.03s/it]\u001b[A\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 264/264 [04:57<00:00,  1.13s/it]\u001b[A\n"
     ]
    }
   ],
   "source": [
    "i = 0\n",
    "with open('outputs/test_gpt_3.5_turbo_%s.txt' % task, 'w') as fd:\n",
    "    for q_ in tqdm(task_data['test'], total=len(task_data['test'])):\n",
    "        q = q_['input'] + '\\n'\n",
    "        for letter in ['A', 'B', 'C', 'D']:\n",
    "            q += '(' + letter + ') ' + q_[letter] + ' '\n",
    "        q += \"\\nA: Let's think step by step.\"  \n",
    "            \n",
    "        prompt_q = mmlu_prompt[task] + \"\\n\\n\" + q\n",
    "\n",
    "        response = completion_with_backoff(\n",
    "              model=\"gpt-3.5-turbo\",\n",
    "              messages=[\n",
    "                    {\"role\": \"system\", \"content\": \"Follow the given examples and answer the question.\"},\n",
    "                    {\"role\": \"user\", \"content\": prompt_q},\n",
    "                ],\n",
    "            temperature=0\n",
    "            )\n",
    "        ans_model = response['choices'][0]['message']['content']\n",
    "        ans_, residual = extract_ans(ans_model)\n",
    "            \n",
    "        a = q_['target']\n",
    "        fd.write('Q: %s\\nA_model:\\n%s\\nA:\\n%s\\n\\n' % (q, ans_, a))\n",
    "        i += 1\n",
    "        # if(i == 2): break"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "8ea5012b-444a-49d8-8752-51ea485d9beb",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "clinical_knowledge\n",
      "num_q 264 correct 208 ratio 0.7879\n"
     ]
    }
   ],
   "source": [
    "print(task)\n",
    "_, _, _ = parse_pred_ans('outputs/test_gpt_3.5_turbo_%s.txt' % task)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
